home *** CD-ROM | disk | FTP | other *** search
/ Leisure Game Pak / Leisure Game Pak.iso / lpgame1 / 04 / source / timer.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-17  |  2KB  |  50 lines

  1. UNIT    TIMER;        (*  by  Marc Palms, 5.1.93  *)
  2. INTERFACE
  3.  TYPE    TIMER_TYPE = OBJECT
  4.                 Stopped   : BOOLEAN;
  5.             TimerEnd,
  6.             Time_left : LONGINT;
  7.                    PROCEDURE  init(time : LONGINT);
  8.             FUNCTION   read : LONGINT;
  9.             PROCEDURE  restart;
  10.             PROCEDURE  stop;
  11.              END;  (*  TIMER_TYPE  *)
  12. IMPLEMENTATION
  13.  USES    DOS;    (*  für GetDate, GetTime  *)
  14.  
  15.  FUNCTION  get_act_time : LONGINT;
  16.  (*  errechnet aktuelle Systemzeit (in Sek. seit 1.1.1980, 00:00)  *)
  17.   VAR    ye, mo, da, ho, mi, se, dummy : WORD;
  18.   BEGIN
  19.     GetDate(ye, mo, da, dummy);  GetTime(ho, mi, se, dummy);
  20.     get_act_time :=
  21.       ((((LONGINT(ye - 1980)*12 +mo)*31 +da)*24 +ho)*60 +mi)*60 +se;
  22.   END;  (*  get_act_time  *)
  23.  
  24.  (*  ----------  TIMER_TYPE-Methoden  ----------  *)
  25.  PROCEDURE  TIMER_TYPE.init(time : LONGINT);
  26.  (*  initialisiert und startet einen Timer mit 'time' Sekunden  *)
  27.   BEGIN
  28.     Stopped   := FALSE;
  29.     Time_left := time;  TimerEnd := get_act_time + time;
  30.   END;    (*  TIMER_TYPE.init  *)
  31.  
  32.  FUNCTION  TIMER_TYPE.read : LONGINT;  (*  gibt die Restzeit zurück  *)
  33.   BEGIN
  34.     IF  (Stopped)  THEN  read := Time_left   (*  Zeit beim Stoppen  *)
  35.                ELSE  read := TimerEnd - get_act_time;
  36.   END;    (*  TIMER_TYPE.read  *)
  37.  
  38.  PROCEDURE  TIMER_TYPE.restart;  (*  startet gestoppten Timer wieder  *)
  39.   BEGIN
  40.     IF  (Stopped)  THEN  TimerEnd := get_act_time + Time_left;
  41.     Stopped := FALSE;
  42.   END;    (*  TIMER_TYPE.restart  *)
  43.  
  44.  PROCEDURE  TIMER_TYPE.stop;  (*  stoppt den Timer  *)
  45.   BEGIN
  46.     IF  NOT(Stopped)  THEN  Time_left := TimerEnd - get_act_time;
  47.     Stopped := TRUE;
  48.   END;    (*  TIMER_TYPE.stop  *)
  49. END.  (*  UNIT TIMER  *)
  50.